package com.ktjiaoyu.crm.repository;

import com.sun.istack.Nullable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;

import java.util.List;
import java.util.Optional;

public interface JpaSpecificationExecutor<T> {
    //根据 Specification 条件查询单个对象，注意的是，如果条件能查出来多个会报错
    Optional<T> findOne(@Nullable Specification<T> var1);
    //根据 Specification 条件查询 List 结果
    List<T> findAll(@Nullable Specification<T> var1);
    //根据 Specification 条件，分页查询
    Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
    //根据 Specification 条件，带排序的查询结果
    List<T> findAll(@Nullable Specification<T> var1, Sort var2);
     //根据 Specification 条件，查询数量
     long count(@Nullable Specification<T> var1);
}
